三、启动方式
AIBOX 支持多种启动方式,包括:
- 从 Micro SD 启动:预装有操作系统的 Micro SD
- 从 eMMC 启动:eMMC 设备经过镜像烧录后启动
- 从网络 PXE 启动:预装有操作系统的 Micro SD 或 eMMC
- 从网络 NFS 启动:预装有操作系统的 Micro SD 或 eMMC
3.1 Micro SD 启动
开发套件出厂时通常会附带一张预装操作系统的 Micro SD 启动卡。该启动卡不仅能够启动开发套件,还提供了一些比较基础的可执行程序。用户可以通过探索这些程序了解开发套件的基本功能,从而建立对开发套件和 SDK 的初步认知。
如需制作新的启动卡或替换现有启动卡,请按照以下步骤操作:
3.1.1 下载镜像
获取镜像的流程如下:
- 获取 SDK 镜像包
- 解压镜像包,在
ta-image/firmware目录下提取其中的sdcard.img文件作为烧录文件
3.1.2 使用 balenaEtcher 烧录镜像
我们推荐使用 balenaEtcher 来烧录镜像,这是一款在 macOS、Windows 和 Linux 系统均可使用的镜像烧录工具。
烧录镜像的具体步骤如下:
-
选择镜像
打开 balenaEtcher,点击 从文件烧录。
从弹出的窗口中选择刚下载的
sdcard.img,选择之后的界面如图。
-
选择 Micro SD 卡
点击 选择目标磁盘,勾选目标 Micro SD 卡,然后点击 选定。
此时界面如下图所示。
-
开始烧录
点击 现在烧录。
烧录过程中界面如下。
烧录完成后会出现 正在验证 的界面。
💡 提示:
- 如果觉得验证比较耗时,可以点击“跳过”,不会影响烧录。
-
烧录完成
烧录完成后会出现 烧录成功 的提示界面。
3.1.3 检查启动卡
制作完烧录卡后,将卡插入 Ubuntu 系统,可以发现出现 2 个分区(bootfs 分区和 rootfs 分区),具体定义如下:
- 启动分区(盘符名 bootfs)
启动分区用于存储系统启动过程中所需的各类文件,包括引导程序、内核镜像等。该启动分区通常采用 FAT32 文件系统格式,以确保兼容性。启动分区包含的主要文件说明如下:
kernel.itb:内核镜像文件u-boot.itb:引导程序文件fw_jump.bin:固件文件(如果适用)
- 根文件系统分区(盘符名 rootfs)
根文件系统分区是 Micro SD 卡上用于存储操作系统核心文件的重要区域,是文件系统的最高层级目录,包括系统的命令库、配置文件、驱动程序等,根分区通常为 ext4 文件系统格式。
Code block
.
├── bin -> usr/bin # 存放系统的基础命令,如ls、cp、mv等
├── bin.usr-is-merged
├── boot
├── dev # 设备文件,用来与硬件交互
├── etc # 存放系统配置文件,如网络配置、用户配置等
├── home # 存放系统用户的家目录
├── lib -> usr/lib # 存放系统运行所需的共享库文件
├── lib.usr-is-merged
├── media
├── mnt
├── opt
├── proc
├── run
├── sbin -> usr/sbin # 存放系统管理命令
├── sbin.usr-is-merged
├── srv # 存放服务相关的文件
├── sys # 存放系统运行时的信息
├── tmp # 临时文件存放目录
├── usr # 用户应用程序和文件的存放目录
└── var # 存放系统运行时产生的可变数据
完成启动卡制作后,可以参考 「AIBOX 使用技术手册」文档的「开机」章节 的相关内容启动开发套件。
📝 注意:
如果用户使用的是 Windows 操作系统,则无需手动管理这些分区,安装程序会自动设置,如果需要手动管理这些分区,可以采用 Windows 操作系统自带的磁盘管理工具进行管理。
3.2 eMMC启动
需要制作一张 Micro SD 烧录卡,并把镜像正确烧录到 eMMC,具体烧录步骤可参考 「AIBOX 使用技术手册」文档的「Micro SD 卡烧录 eMMC 升级」章节 的相关内容。拔出 Micro SD ,按复位键重启即为 eMMC 启动。
3.3 网络 PXE 启动
需要制作一张 Micro SD 烧录卡或者已被正确烧录过的 eMMC,PXE 启动会在仅使用 Boot.fr 和 config.txt 的情况下通过网络去启动系统。
要从网络 PXE 启动,首先需要在电脑端配置 TFTP 和 NFS 服务器,然后开发套件端完成配置并启动。
3.3.1 配置 TFTP 服务器
sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd
sudo mkdir -p /pxe_server/tftp
sudo chmod 777 /pxe_server/tftp
修改 /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/pxe_server/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"
创建 PXE 目录
sudo mkdir -p /pxe_server/tftp/pxelinux.cfg
创建 PXE 配置文件
在 pxelinux.cfg 目录下创建对应的 PXE 配置文件,文件名格式为 01-xx-xx-xx-xx-xx-xx,其中 01- 为固定字段,后面紧跟开发套件的 MAC 地址。
例如,针对 MAC 地址为 e6:e8:dc:ff:db:da 的开发套件,应创建文件 /pxe_server/tftp/pxelinux.cfg/01-e6-e8-dc-ff-db-da:
default Ubuntu Linux-6.6
menu title ULTIMATE PXE SERVER - By Griffon - Ver 1.0
prompt 0
timeout 0
label Ubuntu Linux-6.6
kernel uImage
initrd rootfs.cpio.uboot
复制镜像文件
将 Micro SD 卡 bootfs 分区文件 ``Boot.fr、fw_jump.bin、kernel.itb、rootfs.cpio.uboot、u-boot.itb和overlays目录复制到/pxe_server/tftp/` 目录下。在开发时可对应替换为自己的镜像文件。
启动 TFTP 服务器
sudo service tftpd-hpa restart
注意:针对不同开发套件要烧录不同内核镜像和设备树,只需在
pxelinux.cfg目录下创建对应的 PXE 配置文件即可。
3.3.2 配置 NFS 服务器
安装 NFS 服务
sudo apt-get install nfs-kernel-server rpcbind
修改 /etc/exports,在文件末尾添加(注意:路径和 * 之间有个空格):
/srv/nfs/rootfs *(rw,sync,no_root_squash)
其中 /srv/nfs/rootfs 为 NFS 文件系统挂载路径。
修改 /etc/default/nfs-kernel-server,在文件末尾添加:
RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
复制镜像文件
将 Micro SD 卡 rootfs 分区下所有文件及目录复制到 /srv/nfs/rootfs 目录下。在开发时可对应替换为自己定制的文件系统。
启动 NFS 服务
sudo systemctl restart nfs-kernel-server
3.3.3 配置开发套件
完成服务器端配置后,需要在开发套件端进行相应的网络启动参数配置。开发套件通过修改 bootfs 分区下的 config.txt 文件来设置网络启动相关参数,具体配置示例如下:
# 使能PXE
force_pxe=true
# 从eth0启动
ethact=eth0
# 服务器IP地址
serverip=192.168.56.99
# NFS文件系统挂载路径
rootpath=/srv/nfs/rootfs
完成配置文件的修改后,重新上电即可通过网络启动系统。启动成功后,启动日志中会看到打印Now switch to pxe boot字样。
3.4 网络 NFS 启动
网络 NFS 启动需要准备一张 Micro SD 烧录卡或已正确烧录的 eMMC 设备。NFS 启动会在挂载文件系统时通过网络去加载。开发套件端需要修改 bootfs 分区下的 config.txt 文件,具体配置示例如下:
# 必须关闭PXE
force_pxe=false
# 从eth0启动
ethact=eth0
# 服务器IP地址
serverip=192.168.56.99
# NFS文件系统挂载路径
rootpath=/srv/nfs/rootfs
# 使能nfs
nfs=true
完成配置文件的修改后,重新上电即可通过网络挂载文件系统。NFS 服务器搭建可参考上述 3.3.2 配置 NFS 服务器 的相关内容。